(19)
(12)
(43) Date of publication:
26.01.2000 Bulletin 2000/04
(21) Application number: 99107509.4
(22) Date of filing: 14.04.1999
Europaisches Patentamt
European Patent Office
Office europeen des brevets (11) EP 0 974 895 A2
EUROPEAN PATENT APPLICATION
(51) lnt.Cl 7 : G06F9/44, H04L 29/06
(84)
Designated Contracting States:
(72)
Inventor: Peng, Luoscheng
AT BE CH CY DE DK ES Fl FR GB GR IE IT LI LU
San Jose, California 95117 (US)
MC NL PT SE
Designated Extension States:
(74)
Representative:
AL LT LV MK RO SI
Pfenning, Meinig & Partner
Mozartstrasse 17
(30)
Priority: 03.07.1998 US 110748
80336 Munchen (DE)
(71)
Applicant:
MITSUBISHI DENKI KABUSHIKI KAISHA
Tokyo 100-8310 (JP)
CM
<
in
a>
oo
^ >
O)
o
CL
LU
(54) System for user control of version synchronization in mobile computing
(57) A universal system is provided for synchroniz-
ing servers which accommodates wide area mobile
computing while at the same time making the process
more efficient. The system includes a network of pri-
mary servers with high performance reliable links mak-
ing up the backbone of the synchronization process to
which secondary servers are linked via typically less
reliable links. Moreover, synchronization from a mobile
computer can be done whether in client/ server mode,
or peer-to-peer to support any topology of secondary
servers. In one embodiment while the primary servers
are automatically and frequently synchronized, syn-
chronization of the secondary servers is under the con-
trol of the user which prevents unintended
synchronization. A summarizing version vector is used
to minimize the amount of data transmitted by avoiding
the necessity for exchanging version vectors for individ-
ual objects. This summarizing version vector also per-
mits differential synchronization using summarizing
version vectors and update stamps, the generation of a
latest common version vector to purge off differential
updates on a server, restart of synchronization from the
point of previous failure with data from an unaffected
server, and fine grain synchronization by permitting a
differential update as the atom of data to be transmitted.
Additionally, the system automatically switches between
whole object synchronization and differential synchroni-
zation. Further, the subject system permits synchroni-
zation between different systems because the
semantics of the data is segregated from the synchroni-
zation due to extracting updates in a standard format
and synchronizing based on a standard protocol.
Printed by Xerox (UK) Business Services
2.16.7/3.6
1 EPO!
Description
BACKGROUND OF THE INVENTION
[0001] It will be appreciated that with the proliferation
of mobile computing in the form of laptops and the gen-
eration of versions of data at various points, there is a
need to be able to synchronize the versions of the data
created at multiple locations. This version synchroniza-
tion must take place over a variety of different platforms
as individuals move from location to location, state to
state, and country to country.
[0002] When multiple users work on the same version
of a document or data, in the past there have been var-
ious ways of reconciling the documents. Many systems
have been provided to alert one user to the fact that
another document has been altered and to either
update with the latest version or reject the latest version
at the user's discretion. Log files have been used in the
past to ascertain the time that a version was generated
and version vectors have been utilized for some time to
detect conflicts between object replicas.
[0003] As will be appreciated, there have been several
approaches to the detection of resolving update con-
flicts such as described by' James J. KISTLER et al.,
Disconnected Operation in the CODA File System,
ACM Transactions on Computer Systems, 10(1), 1992;
Peter Reiher et al., Resolving File Conflicts in the Ficus
File System, in USENIX Conference Proceedings, USE-
NIX, June 1994; and, Douglas B. Terry et al., Managing
Update Conflicts in Bayou, a Weekly Connected Repli-
cated Storage System, in Proceedings of the Fifth Sym-
posium on Operating System Principles, ASM,
December 1995. The CODA and Ficus systems utilize
version vectors to detect conflicts between object repli-
cas as first proposed by D. Stott Parker et al., Detection
of Mutual Inconsistency in Distributed Systems, IEEE
Transactions on Software Engineering 9(3), May 1993,
where the Bayou system does not detect conflicts itself,
but rather relies on the application.
[0004] Conflict detection utilizing version vectors has
evolved into two basic paradigms. One paradigm, as
exemplified by Ficus, involves utilizing a version vector
to characterize an individual object replica's current
state relative to other replicas. Another paradigm which
can be inferred by the CODA system is applying version
vectors to both object replicas and the replication unit
that contains the set of objects.
[0005] With respect to the CODA system it will be
appreciated that it is a file replication system which does
not support peer-to-peer synchronization. It is in
essence a client/server system which will not allow two
clients to synchronize directly with each other. For
example, if two mobile users want to exchange each
other's data this must be a peer-to-peer synchronization
if they didn't know each other before. The only way two
such clients can possibly synchronize their data is via a
common server. If the two clients become discon-
74 895 A2 2
nected, then no synchronization can occur in real time.
The CODA system is also not well suited to mobile com-
puting because of the way it caches data and synchro-
nizes with the CODA servers. In CODA when a server is
5 opened, the client always tries to get the latest version
of the file among all servers available. When the file is
closed the client always tries to synchronize with all
servers available. This is extremely expensive due to
the heavy data transmission. Moreover, CODA cannot
10 support disconnected operation if a file access was not
cached on the client prior to the disconnection. This is
because in CODA the data is not replicated as a whole
but rather the files are cached one by one. Thus the
CODA system is complicated when trying to apply it to
15 mobile computing as it requires parallel synchronization
with multiple servers with every open and close of a file.
[0006] With respect to the Ficus system, it is a file rep-
lication system which does not support client/server
synchronization. It is essentially a peer-to-peer system
20 and as such all synchronization between replication
sites is automated. This is not economical in the mobile
computing environment where it may not be desirable
because of the expensive and unreliable nature of the
communications links. The Ficus system may also vio-
25 late the semantics of an application due to the auto-
matic synchronization, making this system not
applicable in such cases. Since synchronization in
Ficus is realized by using version vectors maintained by
individual files, the version vectors need to be
30 exchanged for each file. This is considered not efficient
for wireless communication. For example, all the version
vectors of files must be transmitted between servers,
although the files on both servers may be the same.
Also, the Ficus system does not support differential syn-
35 chronization because it sends whole files during the
synchronization process in an all-or-none manner.
[0007] Finally, the Bayou system is a data base repli-
cation system which supports differential synchroniza-
tion by utilizing a log of writes applied to the database.
40 However, the Bayou system imposes using a single pri-
mary server to globally finalize the order and commit-
ment of writes. A single primary server, if down, delays
the final commitment of the writes. Thus if the primary
server is down, the final order of the writes cannot be
45 established. This delays the ability of other servers to
see the stabilized database as soon as possible. More-
over, the Bayou system requires applications to add
conflict detection and resolution code to every write they
generate. This requirement leads to problems. First, the
so conflict detection is not done by the system, but by the
application, which can be a burden to some of the appli-
cations. Secondly, this code for conflict detection and
resolution must be propagated along with each of the
writes which can greatly increase the cost and traffic of
55 data synchronization.
[0008] Moreover, all of the above systems are not flex-
ible enough to deal with different data types across dif-
ferent systems.
2
3
EP 0 974 895 A2
4
[0009] It is therefore necessary to provide a system
which can cope with all of the problems described
above, especially for the mobile computing environ-
ment.
SUMMARY OF THE INVENTION
[0010] In order to solve the above problems, espe-
cially in a mobile computing environment in which links
to either a central server or peer-to-peer system are
oftentimes unreliable, a system is provided for reliable
synchronization of versions of an object stored at differ-
ent servers which involves the replacement of either the
single central server or a peer-to-peer server system
with a network of primary servers linked with high per-
formance reliable links which serve to synchronize sec-
ondary servers. The use of the primary servers permits
the data to be distributed in a wider area with better data
consistency and more reliability because of the use of
multiple primary servers. By making the mobile compu-
ter a secondary server, this distinguishes these less reli-
able servers from those servers which are the backbone
of the synchronization process.
[0011] In one embodiment, the primary servers are
automatically and frequently synchronized in order to
maintain good data consistency among the primary
servers. On the other hand, the less reliable synchroni-
zation from the secondary servers is controlled from the
secondary servers so that communication costs can be
reduced and so that the document or other data will not
be synchronized unless authorized by the user at the
secondary server. This permits the user to work with
drafts of documents or uncompleted software or pro-
gramming which is not to be synchronized before it is
finished.
[0012] As an important feature, in the subject system
a summarizing version vector is used to minimize the
amount of data transmitted in the synchronizing process
by avoiding the necessity for exchanging version vec-
tors for individual objects, whether or not there is any
difference in the two objects being synchronized.
[0013] The term summarizing version vector as used
herein means a vector having fields which summarize
the state of the object container at a server. Each sum-
marizing version vector is a vector of update stamps.
Each update stamp has a field for the associated object
container's identifier and a field for the associated time
stamp.
[0014] In the case that the objects are not the same,
in the prior art, version vectors for each object at a first
location were sent to a second location, with a corre-
sponding update being sent back to the first location.
This created an a situation in which needless data was
transmitted.
[0015] In the subject system a single summarizing
version vector is sent from a first location to a second
location, and all the updates are then returned all at
once to the first location. In one embodiment, the sum-
marizing version vector is examined at the second loca-
tion to determine if a whole object or a portion of the
object needs to be sent to the first location. This is
accomplished by either defining a version vector to a
5 whole object or defining a version vector to the base of
an object and the update stamp for each of its differen-
tial updates.
[0016] As used herein the base of an object refers to
an object in its initial form absent any changes reflected
w by differential updates.
[0017] Next the received summarizing version vector
is compared with either the above version vectors of the
individual objects or the update stamps for individual dif-
ferential updates. As noted above, the update stamp of
15 a differential update consists of the identifier of the
object container which generated it and the time stamp
when it was generated.
[0018] All of the whole objects or differential updates
are only sent to the first location if their version vectors
20 or updated time stamps are either newer than the
received summarizing version vector or conflicts with it,
thus eliminating the unnecessary version vector transfer
associated with prior art systems. Thus the summariz-
ing version vector system eliminates repeated transfer
25 of version vectors associated with individual objects.
[001 9] Another use for the summarizing version vector
is as follows. It will be noted that in the past, synchroni-
zation systems have operated on an all or nothing basis,
meaning that if the synchronization fails before comple-
te tion, then all of the data must be present. In the subject
In the subject system, when an update is sent from a
first server to a second server, both the version vector of
the corresponding object and the summarizing version
vector in the second sever will be updated right after it
35 successfully receives the update. Therefore, when syn-
chronization falls, the synchronization will be restored
without resending the updates which were already
received by the second server in the previous synchro-
nization by comparing the first server's summarizing
40 version vector with the second server's updated version
vector. This offers more fine grain synchronization and
is therefore more fault tolerant. This is because in the
subject system the unit of transmitted data may be a dif-
ferential update, called an atom because of its small
45 size. This is distinguished from the prior art systems
which must transmit the whole object as the unit of
transmitted data. If more than two servers are involved,
the synchronization may be restored between the first
server and the second server after the point of failure if
so in the meantime a third server has synchronized with
the second server between the time of the failure and
the time of the restart. The above is made possible by
the use. of the summarizing version vector.
[0020] It will be appreciated that the object in a con-
55 tainer may be any object, for instance a document, a
program, or a row of a table in a relational database,
making the subject system a universal system. This
integrates the synchronization process for various forms
3
5
EP 0 974 895 A2
6
of data and is made possible by the separation of the
semantics of objects from the synchronization. This is in
contrast to existing systems which are dependent on
the form of the data.
[0021] As one important aspect of the subject inven- 5
tion, the subject system permits synchronization
between different systems such as synchronizing
between a Word document, a McDraw document and a
FrameMaker document because the semantics of the
data may be separated from the synchronizing. This is w
accomplished by extracting updates in a standard for-
mat and synchronizing based on the standard protocol.
[0022] In operation, an update at one location in one
format is converted to an update in the standard proto-
col. The update in the standard protocol is transmitted 15
to a second location where it is converted to the format
of the object at the second location.
[0023] Moreover, the subject system uses differential
synchronization to minimize the data transfer to only
that data which is changed between versions of objects. 20
As a special feature of the subject invention, the system
switches from whole object synchronization to differen-
tial synchronization when, for instance, local memory is
full or when disc space is limited. Additionally when an
object at one location is very old, if differential synchro- 25
nization is being used, it is convenient to update the
entire or whole object at this second location by auto-
matically shifting to whole object synchronization.
[0024] It is a further feature of the subject invention
that synchronization from a mobile computer can be 30
done either in the client/server mode from secondary
server to primary server, or can be done amongst the
secondary servers, either peer-to-peer or in a hierarchi-
cal system, thus permitting mobile-to-mobile synchroni-
zation. For example, if one secondary server is a user's 35
desktop computer and another secondary server is a
mobile device for secondary use, then data synchroni-
zation between the two secondary servers is of a client-
server type, while the data synchronization of two
mobile devices for instance owned by two salesmen for 40
exchanging each other's sales data is of the peer-to-
peer type. As a result of the fact that the subject system
supports both peer-to-peer and hierarchical structures,
the subject system will support any topology of the sec-
ondary servers. 45
[0025] Because oftentimes a server is only concerned
with data from a selected number of servers, it is unnec-
essary to synchronize with all of the servers in the sys-
tem. In a system which has a large number of servers,
only some of which have data which one wishes to syn- 50
chronize, if one were to attempt to keep track of all
objects and all updates, memory would be quickly
exhausted.
[0026] In order to solve this problem in one embodi-
ment of the subject invention, a latest common ancestor 55
version vector is utilized to selectively purge updates
and version changes at a selected group of servers
which are older than or equal to this latest common
ancestor version vector by purging off differential
updates or deleted objects which have propagated to
the group of the servers in question, e.g. the selected
servers.
[0027] Ideally, a server should purge off differential
updates or deleted objects only if all of the servers in a
system have received the updates. However, because
the number of servers, especially the secondary serv-
ers, dynamically changes, and some servers may be
disconnected from the whole system for a very long
time, purging off updates only after all the servers
received them is impractical and the memory or disk
space may be exhausted even before it can actually
purge off updates.
[0028] Therefore, in the subject system, the system
allows a server to select a set of servers and purge off
updates if the updates have already propagated to all of
the selected servers.
[0029] Furthermore, a selected server may also be
excluded in the consideration of purging off of updates if
it is not synchronized with the selecting server for a time
period in excess of a pre-set limit.
[0030] In the subject system, this purging off of
updates is done by utilizing the latest common ancestor
version vector. When a server synchronizes with any of
the selected servers, it will record the selected servers
versions vector locally. The latest common ancestor ver-
sion vector is then calculated from its own version vec-
tor and all of the selected server's version vector. Any
differential updates or deleted objects' information will
be purged off if their update stamps or version vectors
are newer than or equal to the calculated latest common
version vector.
the synchronization algorithm as shown below uses
both summarizing version vectors and update stamps to
minimize the data transmitted. During synchronization,
the subject algorithm goes through the below listed
steps in order to realize the propagation of updates from
one server to another:
1) The first server sends its summarizing version
vector to the second server.
2) Upon receiving the summarizing version vector
of the first server, the second server sends to the
first server its summarizing version vector, followed
by all of the identifiers of objects which exist in the
second server and that can support differential syn-
chronization.
3) Upon receiving the summarizing version vector
and identifiers from the second server, the first
server figures out all of identifiers of objects which
need to be received as whole objects and sent to
the second server. The sub-steps for this step are
as follows:
a) Find out all objects which exist in the second
7
EP 0 974 895 A2
8
server but do not exist in the first server and put
their identifiers into the list of objects needed to
be received from the second server. This is
done by checking if any of the received identifi-
ers of objects matches the identifier of any 5
object existing in the first server.
b) Find out all objects which exist in both serv-
ers that can support differential synchroniza-
tion. Then check if any newer than the common w
version vector of the two servers, where base
version vector of an object refers to the version
vector of the object absent any differential
updates and where the common version vector
refers to a version vector reflecting the state 15
from where the two servers' summarizing ver-
sion vectors diverged. All of the identifiers of
the objects which passed the check are also
added to the list of objects needed to be
received from the second server. 20
c) Send all the identifiers obtained from sub-
steps a) and b) to the second server.
4) Upon receiving the identifiers from its first server, 25
the second server compares its latest common
ancestor version vector with the summarizing ver-
sion vector of the first server. If the summarizing
version vector of the first server is older than the
second server's latest common ancestor version 30
vector, it extracts all the individual whole objects it
contains. Otherwise, it proceeds to compare its
summarizing version vector with the first server's
summarizing version vector. If the second server's
summarizing version vector is newer than the first 35
server's summarizing version vector, the second
server will scan all the objects existing in it. If the
identifier of an object appears in the list of identifiers
received from the first server, it is sent to the first
server as a whole. If an object is the one needed to 40
be sent as a whole because it does not support dif-
ferential synchronization and its version vector is
either newer or conflicting with the first server's
summarizing version vector, this object will also be
sent to the first server. If an object is the one which 45
supports differential synchronization and its base
version vector is newer than the first server's sum-
marizing version vector, this object will be sent to
the first server as a whole too. Finally, if an object is
the object which supports differential synchroniza- so
tion and has updates which stamps are either
newer than or conflicting with the first server's sum-
marizing version vector, these updates will be sent
to the first server as the differential updates. The
order of all of the objects or updates being sent is 55
determined first by the ordering of version vectors
or the associated update stamps. If there is a dis-
crepancy in the ordering, then a secondary order-
ing process is invoked.
5) After finishing step 4, if the first server is one of
the second server's selected servers, the second
server will store or update the first server's summa-
rizing version vector it has stored previously. It may
also recalculate its latest common ancestor version
vector if all of the selected servers' summarizing
version vectors have been stored in the second
server, and accordingly purges off all the deleted
object's information or differential updates whose
version vectors or update stamps are older than or
equal to the latest common ancestor version vector.
6) Upon receiving each object and update from the
second server, the first server updates the informa-
tion in it as follows:
a) If the received object or update has a version
vector or time stamp older than or equal to the
version vector of the corresponding object in
the first server, this object or update will be
thrown away.
b) If a whole object was received and its ver-
sion vector is newer than the version vector of
the corresponding object in the first server, the
object in the first server will be replaced with
the received object, and accordingly the
object's version vector and the first server's
summarizing version vector will also be
updated.
c) If a whole object was received and its version
vector is conflicting with the version vector of
the corresponding object in the first server, the
two versions of the object will be reconciled by
calling a reconcile method on the object in the
first server, with the received object as the
argument. As the result, a new object will be
generated to replace the object in the first
server, and accordingly, a new version vector
for the new object is generated and the sum-
marizing version vector of the first server is
updated.
d) If a differential update was received and its
update stamp and the received second server's
summarizing version vector indicate it is not yet
contained in and was generated after the corre-
sponding object's differential updates in the
first server, the received updates will be added
to the top of the object's differential updates in
the first server. Accordingly, the summarizing
version vector of the first server will be
updated.
e) If a differential update was received and its
5
9
EP 0 974 895 A2
10
update stamp and the received second server's
summarizing version vector indicate it is not yet
contained in and was not generated after the
corresponding object's differential updates in
the first server, the differential update(s) in the 5
first server that were generated after the com-
mon state of the two servers will be extracted,
and both the extracted differential updates and
the received differential update will be passed
as arguments to the reconcile method on the w
object in the first server in order to reconcile the
conflict between them. As a result, the object in
the first server will be replaced with a new
object or a new update will be added to the
object's differential updates in the first server, 15
and accordingly a new version vector for the
new object or the update stamp for the new
update will be generated and the summarizing
version vector of the first server will be
updated. 2 o
7) After finishing step 6, if the second server is one
of the first server's selected servers, the first server
will store or update the second server's summariz-
ing version vector it has stored previously. It may 25
also recalculate its latest common ancestor version
vector if all of the selected servers' summarizing
version vectors have been stored in the first server,
and accordingly purges off all the deleted object's
information or differential updates whose version 30
vectors or update stamps are older than or equal to
the latest common ancestor version vector.
8) After finishing step 7, the update propagation
from the second server to the first server is com- 35
pleted. If a two way update propagation is required
then steps 1 ) to 7) can be repeated by replacing the
first server with the second server and vice versa.
[0031] As can be seen from the description above, the 40
subject algorithm has two advantages compared with
the existing algorithms. First, it can avoid transmitting
per-object version vectors from one server to another.
Secondly it can transmit the differential updates which
are incorporated in one server, but not incorporated in 45
another server. An additional advantage of the subject
algorithm is that it offers finer grained synchronization,
and is more fault-tolerant.
[0032] In summary, a universal system is provided for
synchronizing servers which accommodates wide area 50
mobile computing while at the same time making the
synchronizing process more efficient. First, the intro-
duction of multiple primary servers with high perform-
ance reliable links ensures high data availability and
scaleability. Secondly, the introduction of the secondary 55
servers makes the subject system well suited for mobile
computing which may use unreliable and expensive
links. Moreover, with the control of the synchronization
by secondary servers, economical synchronization can
be achieved. Further, since some applications do not
permit automatic synchronization, user control of syn-
chronization which prevents unintended synchroniza-
tion is critical.
[0033] A second aspect of the subject invention is the
use of a summarizing version vector. This summarizing
version vector is used to minimize the amount of data
transmitted in the synchronization process by avoiding
the necessity for exchanging version vectors for individ-
ual objects. It can also further reduce data to be trans-
mitted by working with update stamps associated with
individual differential updates to permit differential syn-
chronization. A latest common version vector can be
constructed from a server's summarizing version vector
and the summarizing version vectors of a set of its
selected servers, which is used to reduce differential
updates on the server. Additionally, the summarizing
version vector permits the re-start of synchronization
from the point of previous failure with data from an unaf-
fected server. It also supports fine grain synchronization
by permitting a differential update as the atom of data to
be transmitted.
[0034] As a significant feature of the subject invention,
the system will switch between whole object synchroni-
zation and differential synchronization automatically.
For instance in memory management it is oftentimes
desirable to switch from differential synchronization to
whole object synchronization due to the memory inten-
sive nature of differential processing. Also when doing
whole object synchronization it may be beneficial to
switch to differential synchronization to minimize the
data to be transmitted.
[0035] Last but not least, the subject system permits
a synchronization between different systems because
the semantics of the data is separated from the syn-
chronization, making the system universal as to the for-
mat of the data.
BRIEF DESCRIPTION OF THE DRAWINGS
[0036] These and other features of the subject inven-
tion will be better understood with reference to the
Detailed Description taken in conjunction with the Draw-
ings, of which:
Figure 1 is a diagrammatic representation of the
system architecture of the subject inven-
tion illustrating the primary server/second-
ary server structure;
Figure 2 is a diagrammatic representation of the
architecture of the server for the system of
Figure 1 showing an object container
manager, a synchronization manager,
synchronizers and object containers;
Figure 3 is a diagrammatic representation of the
6
11
EP 0 974 895 A2
12
major subroutines for each of the compo-
nents shown in Figure 2;
Figure 4 is a block diagram of the structure of the
object container of Figure 2, showing the 5
summarizing version vector used therein,
the latest common ancestor version vec-
tor and the structure of the differential
based log used in the subject system;
10
Figure 5 is a diagrammatic representation of the
synchronization of two servers illustrating
the utilization of summarizing version vec-
tors;
15
Figure 6 is a block diagram illustrating a process for
modifying objects in an object container;
Figure 7 is a diagrammatic representation of a syn-
chronization protocol showing the 20
exchange of data between first and sec-
ond servers;
Figure 8 is a block diagram of the system for
extracting updates to be transmitted from 25
a first server to a second server utilizing
summarizing version vectors and a differ-
ential update log for the second server;
Figure 9 is a block diagram showing a process for 30
detecting and resolving conflicts between
two servers;
Figure 10 is a block diagram showing a process for
the purging off of update logs at a server; 35
and,
Figure 11 is a block diagram illustrating the switch-
ing of the synchronization system from a
whole object synchronization process to a 40
differential synchronization process based
on predetermined characteristics of the
system.
DETAILED DESCRIPTION 45
[0037] Referring now to Figure 1 , the system architec-
ture involving primary and secondary servers is illus-
trated. Here a network 10 of primary servers 12 is
interconnected through the utilization of high perform- 50
ance links 14 which are generally orders of magnitude
more reliable than wireless links. It is the purpose of the
high performance links to ensure synchronization integ-
rity and to permit connection of secondary servers to
the primary servers. 55
[0038] As illustrated, a number of secondary servers
1 6 are either linked to each other as illustrated at 1 8 in
a peer-to-peer relationship; or are linked as illustrated at
20 in a hierarchical manner. As discussed hereinbefore,
it is this primary server/secondary server architecture
which permits reliable synchronization with virtually any
type of system, be it a peer-to-peer system or a hierar-
chical system. It will be appreciated that because of the
primary server/secondary server architecture, any type
of system can be accommodated, thus the subject sys-
tem can accommodate any topology amongst the sec-
ondary servers.
[0039] Referring now to Figure 2, in one embodiment,
the architecture of the server of the subject system
includes a number of object containers 22 and an object
container manager 24 coupled thereto. The object con-
tainer manager is coupled to a synchronizer manager
26 which is in turn coupled to object containers 22 and
synchronizers 28. A protocol utility 30 is driven by syn-
chronizer manager to select the most reliable connec-
tion to the network.
[0040] In operation, a system utility or application ini-
tiates synchronization from either the object container
or the synchronizer manager. Synchronizer manager 26
consults with utility 30 to open a reliable connection
between two servers to be synchronized. Thereafter,
synchronizer manger 26 creates a synchronizer such as
synchronizer 28 based on the result from the protocol
utility. Then the synchronizers on the two servers will ini-
tiate the synchronization process.
[0041] Referring now to Figure 3, the subroutines or
methods utilized in the system of Figure 2 are now
described. It will be appreciated that object container 22
utilizes a put method 32 a delete method 34, a get
method 36, a synchronize method 38, an applyUpdate
method 40, a generateUpdates method 42, a purgeOff-
History method 44 and a getSumm a rizingVersion Vector
46. These methods are written in Java and can be found
in the source code hereinafter.
[0042] As can be seen, object container manager 24
is provided with an openObjectContainer method 50,
whereas synchronizer 28 is provided with start method
52, pull method 54, push method 56 and stop method
58, all written in Java and can be found in the source
code hereinafter.
[0043] Synchronizer manager 26 is provided with a
synchronizermethod 60, whereas protocol utility 30 is
provided with an isConnected method 62 and a get-
BestConnection method 64 which are standard.
[0044] Referring now to Figure 4, the data structure of
the subject system is shown for use with object con-
tainer 22. Of importance is the structure of the summa-
rizing version vector, here illustrated at 70 which is used
throughout the subject invention. As can be seen, the
summarizing version vector of object container 22 has a
field for identification 72 and a field for a time stamp 74.
It will be appreciated that Sid 1 refers to object container
1 in the system, whereas the number 1 544 refers to a
time stamp associated with object container 1. The
summarizing version vector in essence contains the
identifiers and the time stamps for all of the objects in
7
13
EP 0 974 895 A2
14
the respective containers. As shown at 80, a similar
summarizing version vector for a remote object con-
tainer is shown at 76. It will thus be appreciated that
there are summarizing version vectors at a number of
locations throughout the system.
[0045] As illustrated at 80 there is a specialized ver-
sion vector called the latest common ancestor version
vector which serves to identify that differential updates
which can be read off of the object container because a
set of remote object containers predefined or prese-
lected containers which already have received common
differential updates. This permits purging off of certain
updates because they are already stored in the prede-
fined set of object containers.
[0046] As illustrated at 82, a log structure is shown
which contains the history of updates to the object con-
tainer 22. As can be seen, the log contains a field 84
having a reference to either the object version vector 86
or to the update stamps 88, and a field 90 having a ref-
erence to the corresponding object 92 or differential
update 94. It will be appreciated that object 96 associ-
ated with update 94 contains an additional update 98,
both of which have updated the initial object, here illus-
trated as base 100.
[0047] Object 92 is the object which must always be
sent as a whole object, whereas Object 96 can be in
terms of differential updates to a base.
[0048] Referring now to Figure 5, what is shown is a
system to permit the change of data in the object con-
tainer during synchronization. As can be seen, an
object container 1, here illustrated at 112 is provided
with summarizing version vector VN^ of server 1 as
illustrated at 111 Also provided to object container 110
are summarizing version vectors OW 1t of servers other
than server 1, here illustrated at 114. The latest com-
mon ancestor version vector, CVV 1 of server 1 as illus-
trated at 116 is also supplied to object container 110.
Likewise, update log 1 of server 1 as illustrated at 1 1 8 is
also applied to object container 110.
[0049] Object container 1 1 0' illustrates a dynamically
changing state for object container 1 1 0 having the indi-
cated inputs, 1 12'-1 18'. The dynamically changing state
of object container 1 1 0 occurs as a result of object con-
tainer 120 having been dynamically changed as illus-
trated at 120' which sends data to object container 1 1 0
as illustrated by arrow 120. It will be appreciated that the
synchronization process starts by object container 110
sending summarizing version vector 1 as illustrated at
arrow 1 22 to the server associated with object container
2, here illustrated at 120. Object container 120 is
changed so that it contains synchronizing information
supplied by summarizing version vector 1 so that it in
turn updates object container 110 throughout informa-
tion sent as illustrated by arrow 1 24.
[0050] As will be appreciated, object container 120
has as inputs the summarizing version vector VV 2 of
server 2 illustrated at 1 26, the summarizing version vec-
tors of 0W 2 of servers other than server 2 as illustrated
at 128, the latest version vector of CVV 2 of server 2 as
illustrated at 130 an update log 2 of server 2 as illus-
trated at 132.
[0051] The information sent, as illustrated by arrow
5 1 22, is the summarizing version vector 2, plus identifier
of objects in object container 120 which support differ-
ential synchronization.
[0052] The synchronization continues as illustrated by
arrow 134, with information going from object container
10 110' to object container 1 20". The information transmit-
ted as illustrated by arrow 1 34 are identifiers of objects
which supports differential synchronization absent the
objects of container 1 , but which objects exist in object
container 2. This can be ascertained by comparing the
15 received identifiers of objects from object container 1 20'
as illustrated by arrow 124 with the identifiers of objects
in object container 1 . Note that the summarizing version
vector is not sent at this point because it has been pre-
viously sent in the first stage of the synchronization
20 process.
[0053] With the transmission of information as illus-
trated by arrow 124, it is possible for object container
120" to be purged off information which is stale. The
purging off of historically stale information is accom-
25 plished by access to the latest common version vector
CVV2', here illustrated at 130'.
[0054] Thereafter, updates are sent from object con-
tainer 120" to object container 110" at which point, a
purging operation can take place. After all of the purging
30 operations take place, the synchronization is completed
such that object container 110'" will contain the most
updated version of all of the objects in the system. It will
be appreciated that the objects in object container 120
can be synchronized and updated in the same manner.
35 [0055] Referring now to Figure 6, what is illustrated is
a system for modifying an object in an object container.
Here, an object container 1 40 is supplied with a summa-
rizing version vector 142 and an update log 144. The
modification step, as illustrated at 146, requires the
40 input of a different summarizing version vector, here
illustrated at 148, along with its associated update log,
here illustrated at 150. What this diagram illustrates is
that if an object container 140 is modified, then it is nec-
essary to modify the corresponding summarizing ver-
45 sion vector and its corresponding update log in order to
record a modification.
[0056] Referring now to Figure 7, what is illustrated is
a synchronization protocol. The synchronization proto-
col involves two synchronizers with one as the synchro-
50 nization initiator and another as a synchronization
responder. The synchronizer initiating the synchroniza-
tion first sends a pull/push request to the synchroniza-
tion responding to the synchronization which is ready to
listen to the synchronization initiator. Thereafter, this
55 responding server sends a summarizing version vector
back. Then a further summarizing version vector is
transmitted in the opposite direction along with identifi-
ers of objects which support differential synchroniza-
8
15
EP 0 974 895 A2
16
tion. Next, identifiers of objects are sent back in the
opposite direction coming with the result being the
sending and update to the server responding to the ini-
tial synchronization request.
[0057] The result of the synchronization protocol is
that the server initiating the synchronization is provided
with an update corresponding to the latest common
ancestor version vector, with all differential updates
purged off. The same is true for the server responding
to the synchronization request.
[0058] Referring now to Figure 8, what is described is
a method for extracting updates to be transmitted. Here,
a server 160 has an associated summarizing version
vector 162 which contains the aforementioned fields 72
and 74. The highlighted field indicates a time stamp
which is earlier in time than the corresponding value in
the summarizing version vector of a second server,
server 164. This is illustrated by highlighted portion 166
of summarizing version vector 168 associated with
server 1 64.
[0059] The updates are extracted by checking the ver-
sion vectors or update stamps in the update log 170 of
server 164. Note these version vectors or update
stamps are the ones found at 86 in Figure 4. The check-
ing process is accomplished in one embodiment as fol-
lows: Any object or differential update with a version
vector or update stamp that includes at least one time
stamp greater than the highlighted corresponding time
stamp in summarizing version vector 1 62 and less than
or equal to the highlighted corresponding time stamp in
summarizing version vector 168 is extracted.
[0060] Referring to Figure 9, a method for detecting
and resolving conflicts is shown in which a server 1 80
has a corresponding summarizing version vector . An
update log 1 84 is coupled to server 1 80 and contains an
object 186 which contains three differential updates
188, 190 and 192 on top of its base 194. As to the sec-
ond server, server 196, this server is provided with a
summarizing version vector 198 and a corresponding
update log 200, server 196 contains an object 202
which is the same as object 186, with the exception that
it has different differential updates indicating a conflict
with 186. This is shown by comparing the highlighted
portions 204 and 206 with highlighted portion 188. The
problem is how to figure out why updates 204 and 206
are in conflict with update 1 86. This conflict detection is
accomplished by comparing the version vectors or
update stamps of the whole object, not shown in this fig-
ure, or the differential updates 188, 190, 192 in the
server 180 and the differential updates 204, 206, 208,
210 in server 196 with the common version vector 212
of the summarizing version vector 182 and 198. The
common version vector of the two summarizing version
vectors reflects a common state for the two servers. If
there are differential update(s) of objects 186 and 202 in
both the servers 1 80 and 1 96 that have a time stamp
greater than the corresponding time stamp in the com-
mon version vector 212, then two objects 186 and 202
are in conflict.
[0061] After the objects 1 86 and 202 have been found
to be in conflict, the conflict is resolved or reconciled by
calling a predetermined reconcile method and passing
5 the differential updates in conflict to the method as
shown at 220. It will be noted that the reconcile method
is usually determined based on a specific application.
[0062] Referring now to Figure 1 0, one method of a
purging off update logs is shown. Here, a server 260
10 has a summarizing version vector of itself, illustrated at
260, and the summarizing version vectors 262 and 260
from other servers. The latest common version vector
266 of the server 230 is calculated from all the three
summarizing version vectors 230, 232, and 234 which
15 represents the common state of all three servers. Hav-
ing obtained the latest common version vector 236, it is
possible to purge off the corresponding update log
entries in the update log 238. This means that log
entries bracketed by bracket 240 may be deleted or
20 purged. This is because these updates have an update
stamp which is older than the latest common version
vector 236, reflecting the fact that these updates have
already been incorporated in all the above three serv-
ers.
2$ [0063] Referring now to Figure 11, it is possible to
switch between whole object synchronization and differ-
ential synchronization. Here, whole object synchroniza-
tion is shown at 150, whereas differential
synchronization is shown at 1 52. A switch 254 is used to
30 determine which synchronization process will be used.
Switch 254 is under the control of logic 256 which oper-
ates as follows.
[0064] In one embodiment, whether an object which
can support differential synchronization will be synchro-
35 nized by sending it as a whole object or the portion of its
differential updates is determined by the following logic.
First, if the object only exists in a first server and is
absent from a second server, then the whole object
needs to be sent from the first server to the second
40 server when the two servers synchronize with each
other. Secondly, if the object exists in the two servers
and if at least at one server the state of the base of the
object is newer than the common state of the object at
the two servers, then no differential synchronization on
45 the object can be done between the two servers
because the object at either of the two servers can not
be synchronized up-to-date after receiving only differen-
tial updates from the other server. This requires switch-
ing to whole object synchronization. Otherwise,
so differential updates can be realized between the two
servers, and the system can be switched to differential
synchronization.
[0065] Other factors, if needed, can be added to the
logic for the switch between whole object synchroniza-
55 tion and differential synchronization. For instance, a
switch from differential synchronization to whole object
synchronization may be triggered if the free space of
memory is close to being exhausted, or if it is found to
9
17
EP 0 974 895 A2
18
be more efficient to send a whole object other than its
differential updates. Alternatively, a switch from whole
object synchronization to differential synchronization
can be determined to minimize the data to be transmit-
ted. In other words, it may be desirable to switch to dif-
ferential synchronization when it is more efficient to
send an object's differential updates as opposed to the
whole object. Note that the switch between whole object
synchronization and differential synchronization is
determined on the basis of individual objects.
[0066] More particularly, the data in the subject sys-
tem can be files, documents, databases or the mix of
part or all of these and they will be appropriately ground.
The way data are grouped can change from application
tP application. For example, in file systems, a directory
can be considered as a file group and it may further
define structures inside to organize data (files). In object
oriented databases, a data group possibly includes all
the homogeneous or heterogeneous objects needed to
meaningfully support its applications. As the first step,
we assume that all the data groups in different devices,
which need to be synchronized with each other, eventu-
ally contain exactly the same data set.
[0067] The subject system has been implemented
using Java. Therefore, all descriptions below are based
on Java's terminology. An object container is a container
which stores and maintains a Java object group.
Objects in the object container are represented by Syn-
chronizable objects which are any Java Serializable
objects providing a replace/apply method and a
reconcile method. Synch ronizable objects are the
abstraction of concrete data such as files, documents,
or rows of database tables. Assuming that a full set of
(Synchronizable) objects already exist in an object con-
tainer, applications can then access objects in the
object container by calling its get or put methods.
[0068] In a server, multiple object containers can be
created by calling the object container manager's
openObjectContainer method. In each server, only one
object container manager can exist and is used to man-
age all the object containers at the server. In addition to
creating object containers, it also offers services such
as listing or deleting the created object containers. For
convenience, each object container will be assigned a
globally unique identifier when created which can be
used when referencing that object container in the sub-
ject system. In one embodiment, the object container
identifiers can be assigned to the hash codes which are
generated by a one-way hash function with the URLs of
the object containers as the input to it.
[0069] Synchronizers are the key component in the
subject system in order to bring any two object contain-
ers into a consistent state. There can be multiple syn-
chronizers in each server, where each of the
synchronizers uses a different type of communications
transport and protocol. For example, synchronizer 1
may use TCP/IP and a two-way synchronization proto-
col while synchronizer 2 may use infrared and a one-
way protocol which is more suited for unreliable wireless
communications. A synchronizer is dynamically created
by the synchronizer manager when needed and will be
self-destroyed just after it has finished the synchroniza-
5 tion. The synchronizer manager in a server can either
bind an object container which is going to be synchro-
nized with a synchronizer and trig the synchronizer to
start the synchronization, or listen to one or more syn-
chronization requests from the synchronizer managers
to at remote servers. The protocol utility can help the syn-
chronizer manager adaptively select a synchronizer to
be generated that matches the best connection availa-
ble currently. The protocol utility is one of the classes
provided by the Java extension package.
15 [0070] As can be seen from the above description, the
object semantics, such the format it uses to represent
its contents and the algorithms it uses to reconcile con-
current update conflicts, is separated from the synchro-
nizer. This feature leads to the ability that the subject
20 system may synchronize between different application
systems.
[0071] Assume server 1 is specified to synchronize
the object container 1 at it with the object container 2 at
the server 2. Further, assume ail the components bun-
25 died to object container i (i = 1 ,2) are annotated as syn-
chronizer manager i, synchronizer i, etc. The detailed
steps for the whole synchronization process are as fol-
lows:
30 1) Synchronizer manager 1 opens a communica-
tion channel to the synchronizer manager 2 which
has been listening to synchronization requests.
2) Synchronizer manager 1 sends the synchroniza-
35 tion request to synchronizer manager 2 which indi-
cates the object container to be synchronized with
and the synchronizer to be used in the synchroniza-
tion.
40 3) Synchronizer manager 1 and 2 create and con-
nect the pair of matching synchronizers 1 and 2
with synchronizer 1 as the synchronization initiator
and synchronizer 2 as the listener.
45 4) Synchronizer 1 sends a pull or push update com-
mand to synchronizer 2. The pull update command
means that object container 1 requires the receipt
of updates from object container 2, whereas the
push update command means that object container
so 1 will propagate updates from it to object container
2. Whether synchronizer 1 should send the pull or
push update command or both in a serialized man-
ner is determined by the system utility or application
which initiated the synchronization. The following
55 steps assume that synchronizer 1 sent a push
update command to synchronizer 2. When syn-
chronizer 1 has sent a pull update command to syn-
chronizer 2, synchronizer 2 sends a confirmation
10
19
EP 0 974 895 A2
20
message back to synchronizer 1 and the rest of the
steps will be the mirror image of the foregoing
steps.
5) Synchronizer 1 obtains the summarize version 5
vector of object container 1 by calling the getSum-
marizingVersionVector method as shown in Figure
3 on object container 1 , and sends the summarizing
version vector to synchronizer 2. The summarizing
version vector of object container 1 reflects the cur- 10
rent state of object container 1 .
6) Synchronizer 2, when needed, records the
received summarizing version vector of object con-
tainer 1 in object container 2. Synchronizer 2 then 15
obtains the summarizing version vector of object
container 2 and the identifiers of objects in object
container 2 that support differential synchronization
by calling the getSummarizingVersionvector
method which is shown in Figure 3 and by calling 20
the entries method described in the source code
presented hereinafter on object container 2. The
summarizing version vector of object container 2
reflects the current state of object container 2. Syn-
chronizer 2 then sends the summarizing version 25
vector and identifiers obtained above to synchro-
nizer 1 .
7) Synchronizer 1, when needed, records the
received summarizing version vector of object con- 30
tainer 2 in object container 1 . Synchronizer 1 then
obtains the identifiers of the objects which have to
be received as a whole object by calling the get-
WholeObjectlds method described in the source
code presented hereinafter on object container 1 35
with the received summarizing version vector of
object container 2 and the received identifiers as
the arguments. The identifiers obtained above
include the identifiers of objects which exist in
object container 2 but miss from object container 1 40
and the objects the state of the base of which are
newer than the common state of object container 1
and object container 2. Synchronizer 1 then sends
the identifiers obtained above to synchronizer 2.
45
8) Synchronizer 2 obtains the updates which have
to be sent to object container 1 by calling the gener-
ateUpdates method as shown in Figure 3 on object
container 2 with the received identifiers of objects
and the summarizing version vector of object con- so
tainer 1 received in step 6 as arguments. Each of
the updates obtained above may be a whole object
with its version vector or a differential update with
its update stamp. Synchronizer 2 then sends the
updates obtained above to synchronizer 1 one by 55
one.
9) Synchronizer 1 applies each of the received
updates to object container 1 by calling the apply-
Update method as shown in Figure 3 on object con-
tainer 1.
1 0) After finishing the sending or receiving updates,
both synchronizers 1 and 2 may call the purgeOff-
History method as shown in Figure 3 on object con-
tainer 1 and object container 2, respectively, in
order to purge off the differential updates which
have been contained in all the object containers
object container 1 or object container 2 is con-
cerned with.
[0072] The applyUpdate method of an object con-
tainer will further call one of the methods defined in an
object in order to replace an object with the received
object, reconcile between an object with the received
object, add the received differential update to an object,
or reconcile the received differential update with the dif-
ferential update(s) of an object which are in conflict with
the received differential update. It will also update the
summarizing version vector of the object container to
reflect the fact that the object container has already
placed the update into it.
[0073] As can be seen from the description above.
The summarizing version vector deployed in the subject
system is not only used for the detection of concurrent
update conflicts, but also for reducing the number of
entries in an update log.
[0074] The summarizing version vector of an object
container is in effect the summary of the version vectors
of all the objects and the update stamps of all the differ-
ential updates in the object container. For an object
which cannot support differential synchronization, the
version vector of the object reflects the current state of
the whole object, whereas for an object which can sup-
port differential synchronization, the version vector of
the object reflects the current state of the base of the
object, absent all the differential updates associated
with it. Much like the version vector for a whole object,
the version vector for the base of an object also dynam-
ically changes as part or all of the differential updates
associated with it are purged off. Therefore, the version
vector of an object characterizes the current state of the
whole object or the base of the object.
[0075] The summarizing version vector of an object
container or the version vector of an object is the vector
of update stamps. An update stamp in turn consists of
two fields: the first field is the identifier of an object con-
tainer which has made modification(s) to an object if this
is the version vector of the object or to object(s) in an
object container if this is the summarizing version vector
of the object container; the second field is the time
stamp generated by the modifying object container cor-
responding to the first field when it made the last modi-
fication to the object or objects. For convenience, an
update stamp is represented by (sidj, t|) where sidj is the
first field of the update stamp, and t| is the second field
11
21
EP 0 974 895 A2
22
of the update stamp. The time stamp in an update
stamp can be real time, an update sequence number, or
whatever is meaningful to the application. A series of
time stamps generated by an object container must be
consistent in meaning and strictly monotonic while dif-
ferent object containers may have different semantics
with the time stamps they generate. This is very impor-
tant when synchronizing between object containers
across different application systems because it is
impractical, to require different application systems gen-
erating time stamps with the same semantics.
[0076] Using the update stamp representation above,
the summarizing version vector of an object container or
the version vector of an object can be represented as
{(sid! , tO, • • • , (sidj, tj), • * • ,(sid n , tn)> or {(sidj, t,) | i =
1, 2 n). The semantics of the summarizing version
vector of an object container and the version vector of
an object are similar, except that the version vector of an
object only reflects that object's current state in its con-
taining object container other that the current state of
the containing object container. Due to the similarity,
only the summarizing version vector will be described in
detail in the following. The version vectors of objects will
be mentioned only when needed.
[0077] The i-th component of the summarizing version
vector of an object container means that the object con-
tainer has contained all modifications made by the
object container with the identifier sidj up until the time
indicated by the time stamp tj. For convenience, the
summarizing version vector of object container j will be
represented as vv j , and its i-th update stamp as w/.
[0078] The size n of the summarizing version vector
w' of object container j means that object container j-th
has contained ali the modifications to the objects in it
made by the object containers with the identifiers sid^
sid 2 , sid n up until the time stamps t lf t 2 , ... t n respec-
tively. Based on the descriptions above, several func-
tions/propositions are defined/proved below in order to
make it possible to compare the state of two entities by
utilizing summarizing version vectors, version vectors,
and update stamps. An entity hereinafter represents an
object container, an object, or a differential update.
[0079] Definition: z = y.getTime(x) is a function
which returns the time stamp z in y that corresponds to
the object container with the identifier x. y represents
the summarizing version vector of an object container,
the version vector of an object or the update stamp of a
differential update. If x does not appear in y, then the
returned time stamp z is 0.
[0080] Definition : Let y^ and y 2 are either the sum-
marizing version vector of an object container, the ver-
sion vector of an object or the update stamp of a
differential update, y^ is equal to Y 2 if
* y 1 .getTimc(x) =y 2 .getTime(x) for any object con-
tainer's identifier in y^ and Y 2 . y^ is newer than y 2 if y^ is
not equal to y 2 and y ^getTimefx) >= y 2 getTime(x)
for any object container's identifier in y, and y 2 .y 1 is
older than y 2 if y<\ is not equal to y 2 and
y 1 .getTime(x) <= y 2 .getTime(x ) for any object con-
tainer's identifier in y A and y 2 . y^ conflicts with y 2 if y^ is
neither equal to y 2> nor newer than y 2 , nor older than y 2 .
[0081 ] Proposition: Let and e 2 represent either an
5 object container, an object, the base of an object, or a
differential update and y^ and y 2 are the summarizing
version vector, the version vector, or the update stamp
of e<i and e 2 , respectively, has the current state same
as or consist with e 2 's if y^ is equal to y 2 . has the cur-
io rent state newer than e 2 s if y^ is newer than y 2 . e<\ has
the current state older than e 2 s if y^ is older than y 2 .
has the current state conflicting with e 2 s if y^ is conflict-
ing with y 2 .
[0082] Prove : By definition, if y^ is equal to y 2 , then
15 any update contained in is also contained in e 2 and
vice versa. So obviously e 1 has the current state same
as e 2 if y^ is equal to y 2 . Next assume that y^ is newer
than y 2 and the current state of is not newer than e 2 's.
By definition, if y^ is newer than y 2 , then e t must contain
20 updates which are not contained in e 2 and any update
contained in e 2 must have been propagated into e^ So
the assumption does not hold. The other part of the
proposition can be proved similarly. (Prove ends.)
[0083] Definition: Let y^ and y 2 be the summarizing
25 version vectors of object containers and e 2 , respec-
tively. r y is called the common version vector of y^ and
y 2 if and only if r y contains only the identifiers of object
containers that exist in both y 1 and y 2 and the time
stamp in r y corresponding to each of such identifiers is
30 the smaller of the corresponding time stamps in y^ and
[0084] Proposition : Let e 1 and e 2 be two different
object containers and y^ and y 2 be the summarizing ver-
sion vectors of y A and y 2 , respectively. Further, let r y be
35 the common version vector of y^ and y 2 . r y then repre-
sents the state from which and e 2 diverged.
[0085] Prove : By definition of y^ and y 2 , if an update
has been contained in both and e 2 , then it must be
reflected in both y^ and y 2 , and therefore the time stamp
40 associated with the update must be equal or less than
the corresponding time stamps in y<\ and y 2 . In other
words, the time stamp associated with the update is
equal to or less than to the smaller of the two corre-
sponding time stamps in y^ and y 2 . By definition of the
45 common version vector, the update is reflected in r y
[0086] If an update is only contained in either or e 2 ,
then the time stamp associated with the update must be
greater than the corresponding time stamp in the sum-
marizing version vector of the other object container.
50 Therefore, the update can not have been reflected by
the summarizing version vector of the object container
absent it. By the definition of the common version vec-
tor, the update also can not have been reflected by r y
(Prove ends.)
55 [0087] It is appreciated that whenever a modification
to an object is made to an object container, that modifi-
cation will be reflected into the object container by call-
ing the put method as shown in Figure 3 on the object
12
23
EP 0 974 895 A2
24
container. The put method will in turn cause the object
container to update its summarizing version vector,
update the version vector of the object to be modified or
generate an update stamp associated with the differen-
tial update to be added, and add the reference to the 5
modified object or added differential update and the ref-
erence to the corresponding version vector or update
stamp to the update log of the object container. The
update stamp of a differential update means that the dif-
ferential update was generated by the object container
with the identifier shown in the first field of the update
stamp at the time shown in the second time stamp in the
update stamp.
[0088] Based on the description above, it is realizable
to figure out the difference of an object container from
another, detect concurrent update conflicts between two
object containers, and reduce the number of entries in
update logs. Let l s denote object container i that is going
to pull updates from another object container j denoted
as R s . The concrete algorithms for the computation
mentioned above are as follows.
[0089] Difference Computing: - Assume R s which
has the summarizing version vector sw j has received
the summarizing version vector sw 1 of l s and the identi-
fiers E 1 of the objects which need to be sent to l s as
whole objects. Then the common version vector rw 1 ' of
sw' and sw* can be calculated based on the definition
above and all the updates need to be sent to l s are
determined as follows.
[0090] First for any object which does not support dif-
ferential synchronization, the version vector of the
object is checked. The whole object will be sent as an
update to I s if its version vector is newer than rw ,j . Let
U1 be the group of updates obtained by the above com-
puting.
[0091] Secondly, for any object which supports differ-
ential synchronization, the version vector of the base of
the object is checked. The whole object will be sent as
an update to l s if its base version vector is newer than
rw ,j . Let U2 be the group of updates obtained by the
above computing.
[0092] Next, for any object which supports differential
synchronization, if there are differential updates applied
to it, then the update stamp of each of the differential
updates is checked. The whole object will be sent as an
update to l s if the update stamp of any such differential
update of the object is newer than or conflicting with rvv lj
and the identifier of the object is contained in E' or any
differential update of the object will be sent as an update
to t s if the update stamp of the differential update is
newer than or conflicting with rw'l Let U3 be the group
of updates obtained by the above computing.
[0093] Finally, let U be the union of U1, U2 and U3.
The order of all updates in U is so that if an update
whose version vector or update stamp is newer than
another than the version vector or update stamp of
another update then the first update is before the sec-
ond update. If two updates in U have conflicting version
vectors or update stamps, then if the two updates are
differential updates the order between the two updates
must be consistent with the order of them in the update
log of R s otherwise if let v1 and v2 be the version vec-
tors or update stamps of the two updates, respectively,
the two updates will be ordered as follows.
[0094] Sequentially pick up an identifier sli of object
container in y1 from the beginning toward the end and
examine the conditions described in the following until
having found an sli which meets one of the condi-
tions. If there exists a sli such that
v1.getTime(sli)> v2.getTime(sli) then put the update
with v1 before the update with v2. If there exists a sli
such that v1 .getTime(sli)< v2.getTime(sli) then put the
update with v1 after the update with v2. One of the con-
dition will be finally met because no two version vectors
in the same object container will be the same because
of the monotonic feature of the time stamps generated
by the same object container.
[0095] U is then the set of updates representing the
difference of l s from R s which will be sent to l s .
[0096] Concurrent Conflict Detection: - The detec-
tion of concurrent update conflicts between two objects,
belonging to l s and R s , respectively, is done after l s
received an update related to the two objects.
[0097] If the received update is a whole object along
with its version vector, then the version vector of the
received update is compared with the version vector of
the object in l s . If the received object has a version vec-
tor newer or older than the version vector of the object in
l s , then there will be no conflict between the two objects
and the received object will either replace the object in
l s or be thrown away. If the version vector of the two
objects conflicts, then the two objects are in conflicts
and the predefined reconcile method will be called on
the object in the l s and R s .
[0098] If the received update is differential update with
its update stamp, then the differential updates associ-
ated with the corresponding object in l s will be com-
pared with the common version vector rw'i of the
summarizing version vectors of I and R. If no differential
update of the object in l s is newer than or conflicts with
iw ,j , then there is no conflict between the object in l s
and the corresponding object in R s . Otherwise, all differ-
ential updates of the object in l s that are newer than or
conflicting with rw 1 ' conflict with the received update
and they will be all passed to the reconcile method of
the object in l s to resolve the conflict.
[0099] Update Log Reduction: - For each of Is and
Rs, called the first object container, if the other object
container, called the second object container, is among
the first object container's selected set of object contain-
ers that are considered in the process of the update log
reduction of the first object container, then the summa-
rizing version vector of the summarizing object con-
tainer will be recorded in the first object container and
the following steps for the update log reduction will be
executed. First, the summarizing version vectors of
15
20
25
30
35
40
45
50
13
25
EP 0 974 895 A2
26
other object containers that were recorded in the first
object container are checked. If the summarizing ver-
sion vectors of all the object containers selected by the
first object container has been recorded, the latest com-
mon version vector of the first object container will be
computed or re-computed. The latest common version
vector of the first object container computed here con-
tains only the object container identifiers which are
included in each of the summarizing version vectors of
the other object containers recorded in the first object
container and the summarizing version vector of the first
object container itself. Each time stamp in the latest
common version vector of the first server is the smallest
of the corresponding time stamps in the summarizing
version vector of the other object containers recorded in
the first object container and the summarizing version
vector of the first object container itself. Next, if the lat-
est common version vector of the first object container is
updated, all the log entry in the update log of the first
object container are scanned, and the updates, that is,
the deletion of whole objects and the records of differen-
tial updates whose version vector or update stamps
whose version vectors or update stamps are older than
or equal to the latest common version vector of the first
object container, are purged off from the update log of
the first object container. As can be seen from its defini-
tion above, the latest common version vector of the first
object container represents the latest state of the object
container which are common to all the other object con-
tainers selected by the first object container and the first
object container itself. Therefore, the semantics of the
purging off of the updates in the update log of the first
object container is that any update which has propa-
gated in all the other object containers selected by the
first object container is eventually removed from the first
object container. This, in general, can free some of the
memory and disk space used by the first object con-
tainer.
[0100] A program listing in C describing the above
system is contained in the Appendix.
[0101] Having now described a few embodiments of
the invention, it should be apparent to those skilled in
the art that the foregoing is merely illustrative and not
limiting, having been presented by way of example only.
Numerous modifications and other embodiments are
within the scope of one of ordinary skill in the art and
are contemplated as failing within the scope of the
invention as defined by the appended claims equivalent
thereto.
Claims
1. A universal system for synchronizing objects at
servers which accommodates wide area mobile
computing, comprising:
a network of primary servers;
high performance reliable links connecting said
primary servers;
means for automatically synchronizing data at
said primary servers;
a number of secondary servers;
5 means for coupling a first secondary server to
one of said primary servers by a link; and,
means at a secondary server for synchronizing
objects thereat with objects at any primary
server to which it can be connected, upon
w establishment of a link there between.
2. The system of Claim 1 , and further including a sec-
ond secondary server and a synchronization link
between said first and second secondary servers,
15 whereby said system supports client/server and
peer-to-peer synchronization modes.
3. A universal system for synchronizing objects at
servers which accommodates wide area mobile
20 computing, comprising:
a network of primary servers;
high performance reliable links connecting said
primary servers;
25 means for automatically synchronizing objects
at said primary servers;
number of secondary servers;
means for coupling a secondary server to one
of said primary servers by a link; and,
30 means at a secondary server and initiated
thereby for synchronizing objects thereat with
objects at any primary server to which it can be
connected, whereby if said link between said
secondary server and said primary server is
35 less reliable, synchronization may nonetheless
take place when said secondary server deter-
mines that a reliable link can be established
between itself and the primary server to which
it can be connected.
40
4. The system of Claim 3, wherein said means for syn-
chronizing includes means at said secondary sever
for ascertaining the reliability of said link and for ini-
tiating synchronization only when a sufficiently reli-
45 able link can be established.
5. The system of Claim 4, wherein said ascertaining
means includes means for determining the band-
width for the transfer of information over said Jink.
50
6. The system of Claim 4 wherein said ascertaining
means include means for ascertaining the available
resources at said secondary server.
55 7. The system of Claim 3 wherein said synchronizing
means include means at said second server for
manually initiating said synchronization.
14
27
EP 0 974 895 A2
28
8. A system for synchronizing objects at two servers,
comprising:
servers at two separate locations;
a network linking said servers; 5
means at one of said servers for synchronizing
objects at said servers either on a whole object
basis or a differential basis; and,
means for causing said synchronizing means
to switch between whole object synchroniza- 10
tion and differential synchronization.
9. The system of Claim 8 wherein said means for
causing said synchronizing means to switch
includes means for ascertaining the available 15
resources at one of said servers and for switching
to whole object synchronization when resources at
a server cannot support differential synchroniza-
tion.
20
10. A method for synchronizing objects at two servers
so as to minimize the amount of data transmitted by
avoiding the necessity for exchanging version vec-
tors of individual objects, comprising the steps of:
25
providing an object container at each of the
servers, each of the object containers adapted
to contain an object;
providing a summarizing version vector for
each object container that summarizes the 30
state of each of the objects at a server, the
summarizing version vector summarizing the
state of the object container and having update
stamps each having a field for the identifier
associated with the object container and a field 35
for a time stamp which corresponds to the last
time when the object container created, modi-
fied or deleted any object thereat, the time
stamp being generated by the object container
when an object therein is created, modified, or 40
deleted; and,
initiating synchronizing by transmitting only a
single summarizing version vector from a first
server to a second server, and returning
updates all at once from the second server to 45
the first server if the associated version vectors
of objects at the second server are newer than
or conflict with the received summarizing ver-
sion vector from the first server, or if the
updated time stamps of the individual objects so
at the second server are newer than or conflict
with the time stamps associated with the sum-
marizing version vector from the first server.
11. The method of Claim 10, wherein said synchroniz- 55
ing step includes performing differential synchroni-
zation based on the summarizing version vectors
and the update stamps to create differential
updates, such that the differential synchronization
is accomplished by transmitting only those parts of
objects which have changed as indicated by the dif-
ferential updates.
12. The method of Claim 11, and further including the
steps of generating a latest common version vector
and using the latest common version vector to
purge off selected differential updates.
13. The method of Claim 10 and further including the
step of restarting a synchronization from the point
of a previous failure with data from an unaffected
server, with the point of failure and the existence of
an unaffected server being determined by the sum-
marizing version vectors associated with the serv-
ers.
14. The method of Claim 10, and further including the
steps of updating both the version vector of an
object corresponding to an update from a first
server to a second server, and the summarizing
version vector in the second server immediately
after the second server receives an update from the
first server, such that synchronization can be
restored without resending updates which are
already received by the second server by compar-
ing the summarizing version vector of the first
server with the updated version vector of the sec-
ond server, thus to provide fine grain synchroniza-
tion.
15. A universal synchronization system in which
objects which exist at two servers are synchronized
regardless of object type, comprising:
servers at separate locations, each having a
version of an object and an update vector asso-
ciated therewith;
a network linking said servers;
means at each server for separating the
semantics of the objects from the synchroniza-
tion including means for extracting object
updates in a standard format regardless of
object format and means for synchronizing the
objects at said servers based on a standard
protocol utilizing said standard format object
updates, whereby synchronization can take
place regardless of the form of the object to
permit synchronization between different sys-
tems.
16. A method for propagating updates from a first
server to a second server and detecting and resolv-
ing conflicts in the synchronization of objects at the
two servers, comprising the steps of:
sending a summarizing version vector from the
w
15
29
EP 0 974 895 A2
30
first server to the second server;
upon receiving the summarizing version vector
of the first server, sending the summarizing
version vector of the second server back to the
first server followed by all of the identifiers of 5
objects which exist in the second server and
that can support differential synchronization;
upon receiving the summarizing version vector
and identifiers from the second server, deter-
mining at the first server the identifiers from the w
received identifiers corresponding to which the
objects do not exist in the first server;
calculating at the first server the common ver-
sion vector of the summarizing version vectors
of the two servers; 15
determining at the first server all of the identifi-
ers of objects that can support differential syn-
chronization and which version vectors to the
bases, absent all of the corresponding differen-
tial updates, are newer than the calculated 20
common version vector, the first and second
determined identifiers of objects being those
objects which can not realize differential syn-
chronization in the undergoing synchroniza-
tion, and which therefore must be switched to 25
whole object synchronization;
sending the identifiers of objects which must
switch to whole object synchronization to the
second server;
upon receiving the identifiers from the first 30
server, calculating at the second server the
common version vector of the summarizing
version vectors of the two servers;
determining at the second server the identifiers
of objects different from the received identifiers 35
that can support differential synchronization
and which version vectors to the bases, absent
all of the corresponding differential updates,
are newer than the calculated common version
vector, the determined objects being those 40
objects which can not realize differential syn-
chronization in the undergoing synchroniza-
tion, and therefore must be switched to whole
object synchronization;
adding the received identifiers to the deter- 45
mined identifiers as the set of identifiers of
objects which, if sent from the second server to
the first server, must send as whole objects;
comparing at the second server the version
vectors of individual objects, including those 50
that can not support differential synchroniza-
tion and those that can support differential syn-
chronization and which identifiers are in the set
of identifiers determined by the second server,
with the summarizing version vector of the first 55
server;
extracting the objects which have a version
vector newer than or conflicting with the sum-
marizing version vector of the first server as the
updates that are the whole objects;
comparing at the second server the update
stamps of individual differential updates that
were applied to the objects at the second
server which have an identifier not in the set of
identifiers determined by the second server;
extracting the differential updates which have
an update stamp newer than or conflicting with
the summarizing version vector of the first
server;
sending all of the extracted updates along with
their corresponding object identifier and ver-
sion vectors or update stamps from the second
server to the first server in a consistent order;
upon finishing sending the updates to the first
server, purging off the latest common ancestor
version vector of the second server and some
or all of the differential updates at the second
server;
upon receiving an update along with the corre-
sponding object identifiers and version vector
or update stamp from the second server, deter-
mining whether the received update is a whole
object or differential update;
comparing the received version vector with the
version vector of the corresponding object at
the first server if the received update is a whole
object and throwing away the received object if
the received version vector is older than or
equal to the version vector of the object at the
first server;
replacing the object at the first server with the
received object if the received version vector is
newer than the version vector of the object at
the first server, or identifying that there is a con-
flict between the object at the first server and
the received object and having the object at the
first server resolve the conflict if the received
version vector conflicts with the version vector
of the object at the first server;
comparing the received update stamp with the
summarizing version vector of the first server if
the received update is a differential update;
throwing away the received differential update
if the received update stamp is older than or
equal to the summarizing version vector of the
first server;
otherwise comparing the summarizing version
vector of the second server with the update
stamp of each differential update at the first
server which was applied to the corresponding
object at the first server;
extracting all the differential updates which
have an update stamp newer than or conflicting
with the summarizing version vector of the sec-
ond server;
applying the received differential update to the
16
31 EP 0 974 895 A2
object at the first server if there is no differential
update extracted at the first server, or identify-
ing that the received differential update con-
flicts with the differential updates extracted at
the first server; 5
having the object at the first server resolve the
conflict;
upon finishing receiving the updates from the
second server, updating the latest common
ancestor version vector of the first server; and, 10
purging off some or all of the differential
updates at the first server.
15
20
25
30
35
40
45
50
55
17
EP 0 974 895 A2
18
EP 0 974 895 A2
19
EP 0 974 895 A2
20
EP 0 974 895 A2
21
EP 0 974 895 A2
{/E/2S/0N VZCTOZS
OW? Or SzfZVSZS
SS/tVS/Z 2
^,
COW-
4
<
7M£ COM
MOW
1/rCTOi? CW 2 OP
SS/ZVE/ZZ
1
T
UPMT£ 'LOG 2
OP ScrtV&Z 2
{/<s 2 op SE/zve^s
/s
LOS/
F/G.5
22
EP 0 974 895 A2
08JEC7
/40
LOG,
— /4G
/4S
J2
■/so
COG 2
23
EP 0 974 895 A2
serzvsrz
//V/ TIA 7V/V<5 THc
SS/Z V£/Z
FSS^ONP/NG TO TFS
SYNCHtZON/Z/i T/ON
L/STFN
VE^S/OA/ VECTOR Q
6-
SEND 5U/VlA><4/ZfZ/NG
sfa/o /p£a/t7f/e{zs
of objects*/
_«si^4fsr£jt€ 5
V
O—
sea/.o uFprfr&x
-*6
6—
6V=^ LAT&S T COMMON
JMO FU/ZOS OFF OlFF£rz£NT/AL
UPOA T£S
upoate latest COMMOM
AA/CE9TOF. VERSION VECT&Z
PU/Z$EOFF D/FFZfZ-
ENT//JL. <<JPP/1TES
24
EP 0 974 895 A2
SEWER, /
-/GO
{/{//
StOf
SIP2
'.IS f ! ■• /.<
a:
• s/a
SUMMA/ZIZ/NG
VE/ZSlON VSCTOZ, /GZ
'/HI33
Ltt/.-i,:
E/Df
SJDZ
• * •
• • *
V/2/O;
W&4£iftfzoQ-
/ zee J
\S£JMMP)/Z/Z/N&
VE/ZSIOM VECTO/Z,
/2£
•/70
UPDATE LOG OF SERVE/1 Z
S(DZ ///030 UPPATE3
e/D n ///1 33 UP0ATE7
S/P/ /t/030 UPDATES
S/D/ ///045 UP DATE 4
'/6.S
25
EP 0 974 895 A2
I
01
VP
V
J
5
\iAj
to
SJ
N 8
5.
«*3BB
I I
k
|5
11
— £^
«3K
7 T
k,
ft
26
EP 0 974 895 A2
I?
V
Q
V)
§
Ok
0)
vn
v.
\
N
in
CM
«\»
N
t
to
I
1
Q
to
\
\
^3
!
<0
§33
5a
v 5 ^
1
5
w?5
I 5
&
27
EP 0 974 895 A2
LOG/C
OBJECT
F/G. //
28
(19)
J
Europaisches Patentamt
European Patent Office
Office europeen des brevets
(12)
(11) EP 0 974 895 A3
EUROPEAN PATENT APPLICATION
(88) Date of publication A3:
08.1 1 .2006 Bulletin 2006/45
(43) Date of publication A2:
26.01.2000 Bulletin 2000/04
(21) Application number: 99107509.4
(22) Date of filing: 14.04.1999
(51) IntCL:
G06F 9/44< 200601 >
H04L 29/06 < 2006 01 >
(84) Designated Contracting States:
(72)
Inventor: Peng, Luoscheng
AT BE CH CY DE DK ES Fl FR GB GR IE IT LI LU
San Jose,
MC NL PT SE
California 95117 (US)
Designated Extension States:
AL LT LV MK RO SI
(74)
Representative: Pfenning, Meinig & Partner GbR
Patent- und Rechtsanwalte
(30) Priority: 03.07.1998 US 110748
Theresienhohe 13
80339 Munchen (DE)
(71) Applicant: MITSUBISHI DENKI KABUSHIKI
KAISHA
Chiyoda-ku
Tokyo 100-8310 (JP)
(54) System for user control of version synchronization in mobile computing
(57) A universal system is provided for synchronizing
servers which accommodates wide area mobile comput-
ing while at the same time making the process more ef-
ficient. The system includes a network of primary servers
with high performance reliable links making up the back-
bone of the synchronization process to which secondary
servers are linked via typically less reliable links. More-
over, synchronization from a mobile computer can be
done whether in client/ server mode, or peer-to-peer to
support any topology of secondary servers. In one em-
bodiment while the primary servers are automatically and
frequently synchronized, synchronization of the second-
ary servers is under the control of the user which prevents
unintended synchronization. A summarizing version vec-
tor is used to minimize the amount of data transmitted
by avoiding the necessity for exchanging version vectors
for individual objects. This summarizing version vector
also permits differential synchronization using summa-
rizing version vectors and update stamps, the generation
of a latest common version vector to purge off differential
updates on a server, restart of synchronization from the
point of previous failure with data from an unaffected
server, and fine grain synchronization by permitting a dif-
ferential update as the atom of data to be transmitted.
Additionally, the system automatically switches between
whole object synchronization and differential synchroni-
zation. Further, the subject system permits synchroniza-
tion between different systems because the semantics
of the data is segregated from the synchronization due
to extracting updates in a standard format and synchro-
nizing based on a standard protocol.
CO
<
o>
oo
o>
o
CL
LU
Printed by Jouve, 75001 PARIS (FR)
EP 0 974 895 A3
European Patent
Office
EUROPEAN SEARCH REPORT
Application Number
EP 99 10 7509
DOCUMENTS CONSIDERED TO BE RELEVANT
Category
Citation of document with indication, where appropriate,
of relevant passages
Relevant
to claim
CLASSIFICATION OF THE
APPLICATION (IPC)
WO 97/04389 A (NOVELL, INC; FALLS,
PATRICK, T; COLLINS, BRIAN, J; DRAPER,
STEPHEN, P.) 6 February 1997 (1997-02-06)
* abstract *
* page 4, line 24 - page 9, line 7 *
* page 9, line 29 - page 62, line 28 *
* claims 1-36; figures 1-4 *
US 5 434 994 A (SHAHEEN ET AL)
18 July 1995 (1995-07-18)
* the whole document *
KISTLER J J ET AL: "DISCONNECTED
OPERATION IN THE CODA FILE SYSTEM"
ACM TRANSACTIONS ON COMPUTER SYSTEMS, ACM,
NEW YORK, NY, US,
vol. 10, no. 1,
1 February 1992 (1992-02-01). pages 3-25,
XP000323223
ISSN: 0734-2071
* the whole document *
US 5 737 601 A (JAIN ET AL)
7 April 1998 (1998-04-07)
* the whole document *
WO 98/21863 A (MITSUBISHI ELECTRIC
INFORMATION TECHNOLOGY CENTER)
22 May 1998 (1998-05-22)
* the whole document *
US 5 727 202 A (KUCALA ET AL)
10 March 1998 (1998-03-10)
* the whole document *
T he p r ese n t s e a r ch r e p ort h oa bee n dro w n up for al l ela i ma
1-7
1-7
1-7
1-7
1-7
1-7
INV.
G06F9/44
H04L29/06
TECHNICAL FIELDS
SEARCHED (IPC)
G06F
Place of search
The Hague
Date of completbn of the search
23 June 2006
Examiner
Wierzejewski , Piotr
CATEGORY OF CITED DOCUMENTS
X : particularly relevant if taken alone
Y : particularly relevant if combined with another
document of the same category
A : technological background
O : non-written disclosure
P : intermediate document
T : theory or principle underlying the invention
E : earlier patent document, but published on, or
after the filing date
D : document cited in the application
L : document cited for other reasons
& : member of the same patent family, comas ponding
document
2
EP 0 974 895 A3
European Patent Application Number
Office E p 99 10 7 5 0 9
CLAIMS INCURRING FEES
The present European patent application comprised at the time of filing more than ten claims.
□ Only part of the claims have been paid within the prescribed time limit The present European search
report has been drawn up for the first ten claims and for those claims for which claims fees have
been paid, namely claim(s):
□ No claims fees have been paid within the prescribed time limit. The present European search report has
been drawn up for the first ten claims.
LACK OF UNITY OF INVENTION
The Search Division considers that the present European patent application does not comply with the
requirements of unity of invention and relates to several inventions or groups of inventions, namely:
see sheet B
□ All further search fees have been paid within the fixed time limit. The present European search report has
been drawn up for all claims.
□ As all searchable claims could be searched without effort justifying an additional fee, the Search Division
did not invite payment of any additional fee.
□ Only part of the further search fees have been paid within the fixed time limit. The present European
search report has been drawn up for those parts of the European patent application which relate to the
inventions in respect of which search fees have been paid, namely claims:
(X~| None of the further search fees have been paid within the fixed time limit. The present European search
i—l report has been drawn up for those parts of the European patent application which relate to the invention
first mentioned in the claims, namely claims:
1-7
3
EP 0 974 895 A3
European Patent
Office
LACK OF UNITY OF INVENTION
SHEET B
EP 99 10 7509
Application Number
The Search Division considers that the present European patent application does not comply with the
requirements of unity of invention and relates to several inventions or groups of inventions, namely:
1. claims: 1-7
A system for synchronizing objects at servers in a wide area
mobile computing network
2. claims: 8-9
A system for synchronizing objects at two servers with both
complete and differential synchronization modes
3. claims: 10-14
A method for sychronizing objects at two servers by
providing a surnnarizing version vector for each state of an
object
4. claim: 15
A synchronization system in which sematics of an object is
separated from the synchronization data
5. claim: 16
A method for proagating updates from a first to a second
server which detects and resolves conflicting data
4
EP 0 974 895 A3
ANNEX TO THE EUROPEAN SEARCH REPORT
ON EUROPEAN PATENT APPLICATION NO.
EP 99 10 7509
This annex lists the patent family members relating to the patent documents cited in the above-mentioned European search report.
The members are as contained in the European Patent Office EDP file on
The European Patent Office is in no way liable for these particulars which are merely given for the purpose of information.
23-06-2086
Patent document
cited in search report
Publication
date
Patent family
member(s)
Publication
date
WO 9704389
06-02-1997
AU
CA
DE
DE
EP
6678096 A
2227432 Al
69615565 Dl
69615565 T2
0839353 Al
18-02-1997
06-02-1997
31-10-2001
11-07-2002
06-05-1998
US 5434994
A
18-07-
1995
EP
0684558 Al
29-11-1995
JP
2948496 B2
13-09-1999
JP
7319748 A
08-12-1995
US 5737601
A
07-04-
1998
US
5806075 A
08-09-1998
W0 9821863
A
22-05-
1998
AU
5171798 A
03-06-1998
AU
5430498 A
03-06-1998
EP
0938798 Al
01-09-1999
EP
1021766 Al
26-07-2000
JP
2001502093 T
13-02-2001
JP
2001504609 T
03-04-2001
WO
9821662 Al
22-05-1998
US 5727202
A
10-03-
•1998
US
5832489 A
03-11-1998
i For more
about this annex : see Official Journal of the European Patent Office, No. 12/82
5